package com.toledo.salao.historico;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Date;
import java.util.List;

import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;
import javax.faces.bean.SessionScoped;
import javax.faces.bean.ViewScoped;
import javax.faces.context.FacesContext;
import javax.servlet.ServletContext;

import org.primefaces.event.FileUploadEvent;

import com.toledo.salao.cidade.CidadeRN;
import com.toledo.salao.imagem.Imagem;
import com.toledo.salao.imagem.ImagemRN;

@ManagedBean(name = "historicoBean")
//@RequestScoped
//@SessionScoped
@ViewScoped
public class HistoricoBean {

	private List<Historico> historicos;
	private Historico historico = new Historico();
	private Historico historicoSelecionado = new Historico();
	private HistoricoRN historicoRN;
	private Date data = new Date();
	//String observacao

	private List<Imagem> imagens;
	private Imagem foto = new Imagem();
	//private ImagemRN imagemRN = new ImagemRN();

	public HistoricoBean() {
		
	
		
		System.out.println("data historico ABRIR "
				+ this.historico.getDatahistorico());
		System.out.println(" historico PRONTO P SALVAR ID "
				+ this.historico.getId_historico());
		System.out.println(" sai da tela de abertura OBS = "
				+ this.historico.getObservacao());

	}

	public void salvarHistorico() {			
		System.out.println("dentro do salvar historico ee "+this.historicoSelecionado.getId_historico());
		
		if (this.historico.getId_historico() == 0){
		
			
		HistoricoRN historicoRN = new HistoricoRN();
		
		
			this.historico.setDatahistorico(new Date());
			
			System.out.println(" entrei no Salvar ");			

			System.out.println("id historico salvar "
					+ this.historico.getId_historico());
			System.out.println("OBS historico salvar "
					+ this.historico.getObservacao());
			System.out.println("DATA historico salvar "
					+ this.historico.getDatahistorico());
			historicoRN.salvar(this.historico);
			this.historico = new Historico();
			//this.setHistoricoSelecionado(null);
			//this.setHistorico(null);
			this.setHistoricos(null);
			//this.setImagem(null);
			//this.setImagens(null);
	
			FacesContext.getCurrentInstance().addMessage(
					null,
					new FacesMessage(FacesMessage.SEVERITY_INFO,
							"Historico adicionado com sucesso",
							"Historico adicionado com sucesso"));
		}else{
			this.alterarHistorico();
		}
	}
	
	
	
public void alterarHistorico() {			
		
		HistoricoRN historicoRN = new HistoricoRN();
		
		
			this.historico.setDatahistorico(new Date());
			//this.historico.setObservacao(this.historicoSelecionado.getObservacao());
		//this.historicoSelecionado.setDatahistorico(new Date());
	//	this.setHistorico(this.historicoSelecionado); //teste
			System.out.println(" entrei no Alterar ");			

			System.out.println("id historico alterar "
					+ this.historico.getId_historico());
			System.out.println("OBS historico alterar "
					+ this.historico.getObservacao());
			System.out.println("DATA historico alterar "
					+ this.historico.getDatahistorico());
			historicoRN.alterar(this.historico);
			this.historico = new Historico();
			this.setHistoricos(null);
			//this.setImagem(null);
			
		
			FacesContext.getCurrentInstance().addMessage(
					null,
					new FacesMessage(FacesMessage.SEVERITY_INFO,
							"Historico alterado com sucesso",
							"Historico alterado com sucesso"));
		
	}
	
	

	public void salvaImagem() {
		
		System.out.println("To no File Salvar Imagem");
		
		ImagemRN imagemRN = new ImagemRN();
		
		try {
			
			imagemRN.salvar(foto);
		} catch (Exception ex) {
			ex.printStackTrace();
		} finally {
			foto = new Imagem();

			FacesContext.getCurrentInstance().addMessage(
					null,
					new FacesMessage(FacesMessage.SEVERITY_INFO,
							"Imagem adicionada", "Imagem adicionada"));
		}

	}

	public void processFileUpload(FileUploadEvent uploadEvent) {		
		
		System.out.println("To no File Upload");
		
		foto = new Imagem();
		
		try {
			System.out.println("Entrei p salvar up da imagem ");
			
			
			foto.setHistorico(this.historicoSelecionado);

			System.out.println("OBS Dentro do Obj Imagem() - HISTORICO.SELECIONADO.ID= "
					+ foto.getHistorico().getId_historico());
			System.out.println("OBS Dentro do Obj Imagem() - HISTORICO.SELECIONADO.ID= "
					+ foto.getHistorico().getObservacao());			
		
			foto.setImagem(uploadEvent.getFile().getContents());
			foto.setNome_arquivo(uploadEvent.getFile().getFileName());
			
			System.out.println("OBS Entrei p salvar up da imagem ID= "
					+ this.foto.getId_imagem());			
			System.out.println("OBS Entrei p salvar up da imagem NOME DA IMAGEM=  "
					+ this.foto.getNome_arquivo());
			System.out.println("OBS Entrei p salvar up da imagem NOME DA IMAGEM=  "
					+ this.foto.getHistorico().getId_historico());
			
		} catch (Exception ex) {
			ex.printStackTrace();
		}

	}

	public void listarImagensPorHistorico() {
		System.out.println("OBS Entrei p listar por hist id hist=  "
				+ this.historicoSelecionado.getId_historico());

		try {
			ServletContext sContext = (ServletContext) FacesContext
					.getCurrentInstance().getExternalContext().getContext();

			System.out.println("OBS Entrei no try p listar por hist id hist=  "
					+ this.historicoSelecionado.getId_historico());
			ImagemRN imagemRN = new ImagemRN();
			imagens = imagemRN.listarImagemPorHistorico(historicoSelecionado
					.getId_historico());
			
			System.out.println("elemento 1=  "
					+ this.imagens.get(0).getId_imagem());

			File folder = new File(sContext.getRealPath("/temp"));
			if (!folder.exists())
				folder.mkdirs();

			for (Imagem i : imagens) {
				String nome_arquivo = i.getId_imagem() + ".jpg";
				String arquivo = sContext.getRealPath("/temp") + File.separator
						+ nome_arquivo;

				criaArquivo(i.getImagem(), arquivo);
			}
		} catch (Exception ex) {
			ex.printStackTrace();
		}
	}

	private void criaArquivo(byte[] bytes, String arquivo) {
		FileOutputStream fos;

		try {
			fos = new FileOutputStream(arquivo);
			fos.write(bytes);

			fos.flush();
			fos.close();
		} catch (FileNotFoundException ex) {
			ex.printStackTrace();
		} catch (IOException ex) {
			ex.printStackTrace();
		}
	}

	public List<Historico> getHistoricos() {
		HistoricoRN historicoRN = new HistoricoRN();
		if (historicos == null) {
			historicos = historicoRN.listar();
		}
		return historicos;
	}

	public void setHistoricos(List<Historico> historicos) {
		this.historicos = historicos;
	}

	public Historico getHistorico() {
		return historico;
	}

	public void setHistorico(Historico historico) {
		this.historico = historico;
	}

	public Historico getHistoricoSelecionado() {
		return historicoSelecionado;
	}

	public void setHistoricoSelecionado(Historico historicoSelecionado) {
		this.historicoSelecionado = historicoSelecionado;
	}

	public Date getData() {
		return data;
	}

	public void setData(Date data) {
		this.data = data;
	}

	public HistoricoRN getHistoricoRN() {
		return historicoRN;
	}

	public void setHistoricoRN(HistoricoRN historicoRN) {
		this.historicoRN = historicoRN;
	}

	public List<Imagem> getImagens() {
		return imagens;
	}

	public void setImagens(List<Imagem> imagens) {
		this.imagens = imagens;
	}

	public Imagem getImagem() {
		return foto;
	}

	public void setImagem(Imagem imagem) {
		this.foto = imagem;
	}


}
